<?php

namespace App\Http\Controllers\Admin;

use App\Models\Node;
use App\Models\Role;
use App\Models\User;
use Illuminate\Http\Request;

class RoleController extends BaseController
{
    /**
     * 列表
     */
    public function index(Request $request)
    {
        if(request()->wantsJson()){
            $where =[];
            $name = $request->input('name');
            if($name){
                $where =[['name', 'like', "%{$request->input('name')}%"]];
            }
            $data  = $this->getPage('roles',$where);
            return response()->json($data);
        }else{
            return view('admin.role.index');
        }
    }

    /**
     * 添加显示
     */
    public function create()
    {
        return view('admin.role.create');
    }

    /**
     * 添加处理
     */
    public function store(Request $request)
    {
        try {
            $this->validate($request,[
                'name'=>"required|unique:roles,name"
            ]);
        }catch (\Exception $e){
            return $this->reErJson('数据不正确');
        }
        $userData  =Role::create($request->only('name'));
        if($userData){
            return $this->reSuJson('添加成功');
        }
        return $this->reErJson('添加失败');
    }

    /**
     * 根据id显示单条
     */
    public function show($id)
    {
        $data = Role::find($id);
        return view('admin.role.edit',compact('data'));
    }

    /**
     * 修改显示
     */
    public function edit($id)
    {
        $data = Role::find($id);
        return view('admin.role.edit',compact('data'));
    }

    /**
     * 修改处理
     */
    public function update(Request $request, $id)
    {
        try {
            $this->validate($request,[
                //表名  唯一的字段 排除的行的值   指定字段
                'name'=>'required|unique:roles,name,'.$id.',id'
            ]);
        }catch (\Exception $e){
            return  $this->reErJson('角色名称已存在');
        }
        $re = Role::where('id',$id)->update($request->only('name'));
        if($re){
            return  $this->reSuJson('修改成功');
        }
        return $this->reErJson('修改失败');
    }
    /**
     * 删除
     */
    public function destroy($id)
    {
        $re = Role::find($id)->delete();
        ///强制删除 配置软删除后 实际删除
//        $re = Role::find($id)->forceDelete();
        if($re){
            return  $this->reSuJson('成功');
        }
        return  $this->reErJson('失败');;
    }

    /**
     *角色 权限控制
     */
    public function node(Role $role)
    {
        //获取当前 已经设置的权限id'
        $nodes   = $role->nodes()->pluck('id')->toArray();
        //获取所有的权限
        $nodeall = (new Node())->getAllLevel();
        return view('admin.role.node',compact('role','nodes','nodeall'));
    }
    /**
     *角色 权限操作
     */
    public function nodesave(Request $request, Role $role)
    {
        if($request->wantsJson()){
            $re = $role->nodes()->sync($request->get('node'));
            if($re){
                return  $this->reSuJson('成功');
            }
            return  $this->reErJson('失败');;
        }
        return view('admin.role.index');
    }
}
